#include<stdio.h>

/*
    1.顺序查找：从数组的0索引开始，依次往后查找
        如果找到了，就会返回数据对应的索引
        如果没有找到，就会返回-1

    2.二分查找/折半查找 ：（仅适用于有序的数据）
        每次排除一半的查找范围,不断缩小范围
        如果没有找到，返回-1
*/

int order(int arr[],int len,int num)//顺序查找函数
{
    for (int i = 0; i < len; i++)
    {
        if (arr[i]==num)
        {
            return i;//返回与查找值对应的索引号
        }
    }
    return -1;
}

int binarySearch(int arr[],int len,int num)//二分查找函数
{
    int min = 0;
    int max = len-1;
    while (min<=max)
    {
        int mid = (min+max) / 2;//数组中间位置

        if (arr[mid] < num)
        {
            min = mid + 1;
        }
        else if (arr[mid] > num)
        {
            max = mid -1;
        }
        else
            return mid;
    }
    
}

int main()
{
    int arr[8] = {-11,5,37,42,45,82,90,126};
    int len = sizeof(arr) / sizeof(arr[0]);

    int num;
    printf("请输入查找值：");
    scanf("%d",&num);

    //int index = order(arr,len,num);   //采用「顺序查找」

    int index = binarySearch(arr,len,num);  //采用「二分查找」

    printf("输出索引为：%d\n",index);

    return 0;
}